package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.inject.Inject;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOArticuloSede;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioArticuloSede;
import pe.com.cotelasa.scp.entidad.ArticuloSede;
import pe.com.cotelasa.scp.entidad.Empresa;
import pe.com.cotelasa.scp.entidad.Sede;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

@Service
public class ServicioArticuloSedeImpl implements IServicioArticuloSede, Serializable {

    @Inject
    private IDAOArticuloSede daoArticuloSede;

    @Override
    public Collection<ArticuloSede> listaArticulosPorSedeConStock(ArticuloSede articuloSede)
            throws ServiceException {
        try {
            return daoArticuloSede.listaArticulosPorSedeConStock(articuloSede);
        } catch (DAOException e) {
            throw new ServiceException(e.getMessage(), e);
        }
    }

    @Override
    public ResultadoServicio guardarArticuloSede(ArticuloSede articuloSede) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            //banco.setId(5);
            articuloSede.setEsRegistro("" + ESTADO_REGISTRO.ACTIVO.getValor());
            daoArticuloSede.insertar(articuloSede);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarArticuloSede(ArticuloSede articuloSede) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {
            daoArticuloSede.actualizar(articuloSede);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
        return resultadoServicio;
    }

    @Override
    public ArticuloSede buscarArticuloSede(ArticuloSede articuloSede) throws ServiceException {
        try {
            return daoArticuloSede.buscarArticuloSede(articuloSede);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<ArticuloSede> listaArticulosUnicosPorSede(ArticuloSede articuloSede) throws ServiceException {
        try {
            return daoArticuloSede.listaArticulosUnicosPorSede(articuloSede);
        } catch (DAOException e) {
            throw new ServiceException(e.getMessage(), e);
        }
    }

    @Override
    public Collection<ArticuloSede> listaStockPorFiltro(ArticuloSede articuloSede) throws ServiceException {
        try {
            if (articuloSede.getCodigoCliente() == null) {
                articuloSede.setCodigoCliente("");
            }
            return daoArticuloSede.listaStockPorFiltro(articuloSede);
        } catch (DAOException e) {
            throw new ServiceException(e.getMessage(), e);
        }
    }

    @Override
    public Collection<ArticuloSede> listaArticulosParaAjuste(ArticuloSede articuloSede, Integer[] listaId) throws ServiceException {
        try {
            return daoArticuloSede.listaArticulosParaAjuste(articuloSede, listaId);
        } catch (DAOException e) {
            throw new ServiceException(e.getMessage(), e);
        }
    }

    @Override
    public Collection<ArticuloSede> listaPartidaPorSedeYArticulo(ArticuloSede articuloSede) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("id.idSede", articuloSede.getId().getIdSede());
            parametro.put("id.idArticulo", articuloSede.getId().getIdArticulo());
            parametro.put("esRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            return daoArticuloSede.obtenerColeccionEntidadPorFiltros(ArticuloSede.class, parametro);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public Collection<ArticuloSede> listaArticulosParaReporte(ArticuloSede articuloSede) throws ServiceException {
        try {
            return daoArticuloSede.listaArticulosParaReporte(articuloSede);
        } catch (DAOException e) {
            throw new ServiceException(e.getMessage(), e);
        }
    }

    @Override
    public Collection<ArticuloSede> listaArticulosPorNombre(ArticuloSede articuloSede) throws ServiceException {
        /*try {
         Map<String, Object> parametro = new HashMap<String, Object>();
         parametro.put("id.idSede", articuloSede.getId().getIdSede());
         parametro.put("id.idEmpresa", articuloSede.getId().getIdEmpresa());
         parametro.put("articulo.nombreComercial", articuloSede.getArticulo().getNombreComercial());
         parametro.put("esRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
         return daoArticuloSede.obtenerColeccionEntidadPorFiltros(ArticuloSede.class, parametro);
         } catch (DAOException ex) {
         throw new ServiceException(ex.getMessage(), ex);
         }*/
        try {
            return daoArticuloSede.listaArticulosPorNombre(articuloSede);
        } catch (DAOException e) {
            throw new ServiceException(e.getMessage(), e);
        }

    }
}
